/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package games.freecell.structure;

import commomgame.Region;
import commomgame.SubRegion;
import games.freecell.core.RulesOfCells;

/**
 *
 * @author João Carlos Nunes Bittencourt
 * @author Ian Andersson
 */
public class RegionOfCells extends Region {

    public RegionOfCells(int numberOfSubRegions) {
        super(numberOfSubRegions);
        this.rulesOfMovement = new RulesOfCells();
        this.setNameOfSubRegions();
    }
   
    /**
     * Define os nomes de todas as subregiões da região de reservas
     */
    private void setNameOfSubRegions() {
        String name = "";
        for (int i = 1; i <= this.numberOfSubRegions; i++) {
            name = "C";
            this.getRegion().get(i - 1).setName(name += i);
        }
    }


    /**
     * Método invocado quando usuário movimenta carta tendo uma das células como destino
     *
     * @param value Representa o valor da carta escolhida pelo usuário para movimentação
     * @param nipe Representa o nipe da carta escolhida pelo usuário para movimentação
     * @param subRegionOrigin Representa a região de origem da carta
     * @param subRegionTarget Representa a região de destino da carta: região de reservas
     * @return permissão de movimentação da carta
     */
    public boolean verifyRule(int value, String nipe, SubRegion subRegionOrigin, SubRegion subRegionTarget) {

        if( rulesOfMovement.verifyMovement(value, nipe, subRegionOrigin, subRegionTarget) ){
            subRegionTarget.addCardInSubRegion(subRegionOrigin.selectCard(value, nipe));
            subRegionOrigin.removeCard(subRegionOrigin.selectCard(value, nipe));
            return true;
        }else{
            return false;
        }
    }

    public int getNumOfEmptySubregions(Region regiao) {
        int cont = 0;

        for(int i = 0; i < 4; i++){

            if(regiao.getRegion().get(i).getSize() == 0){
                cont++;
            }
        }

        return cont;
    }
}
